/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package daw.bean;

import java.io.File;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


@Entity
@Table(name = "rol_usuario", catalog = "defensor", schema = "")
@NamedQueries({@NamedQuery(name = "RolUsuario.findAll", query = "SELECT r FROM RolUsuario r"),
@NamedQuery(name = "RolUsuario.findByIdRolUsuario", query = "SELECT r FROM RolUsuario r WHERE r.idRolUsuario = :idRolUsuario"),
@NamedQuery(name = "RolUsuario.findByNombre", query = "SELECT r FROM RolUsuario r WHERE r.nombre = :nombre"),
@NamedQuery(name = "RolUsuario.loadRolInvitado", query = "SELECT r FROM RolUsuario r WHERE r.nombre = 'Invitado'")})

public class RolUsuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idRolUsuario")
    private Integer idRolUsuario;
    @Basic(optional = false)
    @Column(name = "nombre")
    private String nombre;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idRolUsuario")
    private List<Usuario> usuarioCollection;

    public RolUsuario() {
    }

    public RolUsuario(Integer idRolUsuario) {
        this.idRolUsuario = idRolUsuario;
    }

    public RolUsuario(Integer idRolUsuario, String nombre) {
        this.idRolUsuario = idRolUsuario;
        this.nombre = nombre;
    }

    public Integer getIdRolUsuario() {
        return idRolUsuario;
    }

    public void setIdRolUsuario(Integer idRolUsuario) {
        this.idRolUsuario = idRolUsuario;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<Usuario> getUsuarioCollection() {
        return usuarioCollection;
    }

    public void setUsuarioCollection(List<Usuario> usuarioCollection) {
        this.usuarioCollection = usuarioCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idRolUsuario != null ? idRolUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof RolUsuario)) {
            return false;
        }
        RolUsuario other = (RolUsuario) object;
        if ((this.idRolUsuario == null && other.idRolUsuario != null) || (this.idRolUsuario != null && !this.idRolUsuario.equals(other.idRolUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "daw.bean.RolUsuario[idRolUsuario=" + idRolUsuario + "]";
    }

    public String toXML(){
        String xml = "<rolusuario>";
        xml+="<idrolusuario>"+getIdRolUsuario()+"</idrolusuario>";
        xml+="<nombre>"+getNombre()+"</nombre>";
        xml+="</rolusuario>";
        return xml;
    }

    public String rolUsuarioCollectionToXML(List<RolUsuario> rolesusuario){
        String xml="<rolesusuario>";
        Iterator i = rolesusuario.iterator();
        while(i.hasNext()){
            RolUsuario c = (RolUsuario)i.next();
            xml+=c.toXML();
        }
        xml+="</rolesusuario>";
        return xml;
    }

    public String crearMenu(String context, File urlmenu) throws Exception{
        String html="";
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder parser = factory.newDocumentBuilder();
        Document documentoMenu = parser.parse(urlmenu);


        NodeList paginasMenu = documentoMenu.getElementsByTagName("carpeta");
        int n = paginasMenu.getLength();
        html="<div class='bd'>"+
                "<ul class='first-of-type'>";
        for(int i=0; i< n; i++){
            Node nodoPagina = paginasMenu.item(i);
            NamedNodeMap atributosPagina;
            atributosPagina = nodoPagina.getAttributes();
            html+="<li class='yuimenubaritem first-of-type'>\n" +
                    "<a class='yuimenubaritemlabel' href='#'>"+atributosPagina.getNamedItem("texto").getNodeValue()+"</a>\n";
            NodeList archivosMenu = nodoPagina.getChildNodes();
            int m = archivosMenu.getLength();

            String mid="";
            for(int j=0; j<m;j++){
                Node nodoArchivo = archivosMenu.item(j);
                if(nodoArchivo.getNodeName().equals("archivo")){
                    NamedNodeMap atributosArchivo = nodoArchivo.getAttributes();

                    String roles = atributosArchivo.getNamedItem("roles").getNodeValue();

                    if(roles.indexOf("{"+getNombre()+"}")>=0){
                        String texto = atributosArchivo.getNamedItem("texto").getNodeValue();
                        String direccion = atributosArchivo.getNamedItem("direccion").getNodeValue();
                        mid+="<li class='yuimenuitem'><a class='yuimenuitemlabel' href='"+context+"/"+direccion+"'>"+texto+"</a></li>\n";
                    }
                }
            }
            if(mid.length()>0){
                 String pre="<div id='"+atributosPagina.getNamedItem("texto").getNodeValue()+"' class='yuimenu'>\n"+
                                "<div class='bd'>\n"+
                                    "<ul>\n";
                 String post=       "</ul>\n"+
                                "</div>\n"+
                             "</div>\n";
                 html+=pre+mid+post;
            }
            html+="</li>\n";
        }
        html+=  "</ul>\n"+
              "</div>\n";
        return html;
    }
}
